AWS SDK for Python を使用してAmazon Connectのセキュリティプロファイルを別のインスタンスにコピーしてみた
こんにちは。
繁松です。
はじめに
AWS SDK for Python (Boto3) を使用して、同一アカウント、同一リージョン内のAmazon Connectにセキュリティプロファイルをコピーしてみました。
セキュリティプロファイルを同様の設定で作成したい場合、インポート/エクスポートの機能がないため、手作業で一つ一つ作成する必要があります。AWS SDK for Python (Boto3) を使用することで、同様の設定のセキュリティプロファイルを簡単に作成できました。
セキュリティプロファイルをコピーしたいケースとしては、開発環境で作成したセキュリティプロファイルを本番環境でも同じ設定で利用したい場合や、Amazon Connectのユーザー認証方式を変更したい場合等、新たに作成したインスタンスでも既存のインスタンスと同様の設定が使いたいといったケースが考えられます。
本ブログでコピーされる設定値は、「セキュリティプロファイル名」、「説明」、「権限設定」、「タグベースのアクセスコントロール設定」です。
やってみた
コピー元のインスタンスのIDと、コピー先のインスタンスのIDを確認しスクリプト内で指定します。
コピー元のインスタンスからセキュリティプロファイルのリストを取得し、設定されている権限の設定や説明等の詳細情報を取得します。
コピー元とコピー先に同じ名前のセキュリティプロファイルがある場合は、設定値をアップデートするようにしています。
import boto3
def copy_security_profile(source_instance_id, target_instance_id, region_name='ap-northeast-1'):
connect = boto3.client('connect', region_name=region_name)
# コピー元のインスタンスからセキュリティプロファイルのリストを取得
list_security_profiles = connect.list_security_profiles(
InstanceId=source_instance_id,
)['SecurityProfileSummaryList']
for security_profile in list_security_profiles:
security_profile_id = security_profile['Id']
# 詳細なセキュリティプロファイル情報を取得
security_profile_details = connect.describe_security_profile(
InstanceId=source_instance_id,
SecurityProfileId=security_profile_id
)['SecurityProfile']
# コピー元のセキュリティプロファイルに設定された権限を取得
security_profile_permissions = connect.list_security_profile_permissions(
InstanceId=source_instance_id,
SecurityProfileId=security_profile_id
)['Permissions']
# コピー先のセキュリティプロファイルを確認
existing_security_profiles = connect.list_security_profiles(
InstanceId=target_instance_id,
)['SecurityProfileSummaryList']
description = security_profile_details.get('Description', "")
for existing_security_profile in existing_security_profiles:
# 同じ名前のセキュリティプロファイルが存在する場合はアップデートを実施
if existing_security_profile['Name'] == security_profile['Name']:
update_params = {
'Description': description,
'Permissions': security_profile_permissions,
'SecurityProfileId': existing_security_profile['Id'],
'InstanceId': target_instance_id,
'AllowedAccessControlTags': security_profile_details['AllowedAccessControlTags'],
'TagRestrictedResources': security_profile_details['TagRestrictedResources']
}
connect.update_security_profile(**update_params)
print(f"Updated Queue Description: {security_profile['Name']}")
break
else:
# セキュリティプロファイルを作成
create_params = {
'SecurityProfileName': security_profile['Name'],
'Description': description,
'Permissions': security_profile_permissions,
'InstanceId': target_instance_id,
'Tags': security_profile_details['Tags'],
'AllowedAccessControlTags': security_profile_details['AllowedAccessControlTags'],
'TagRestrictedResources': security_profile_details['TagRestrictedResources']
}
connect.create_security_profile(**create_params)
print(f"Copied Queue: {security_profile['Name']}")
# コピー元とコピー先のインスタンスIDを指定
source_instance_id = 'source_instance_idを指定'
target_instance_id = 'target_instance_idを指定'
copy_security_profile(source_instance_id, target_instance_id)
- 注意点
同じ名前のセキュリティプロファイルがあった場合、設定値のアップデートでtagの項目は含まれません。
実行前
コピー元インスタンス
セキュリティプロファイル名「test01」が作成されています。
コピー先インスタンス
「test01」は作成されておらず、Agentの権限が全て削除されています。
実行後
コピー先インスタンス
test01のセキュリティプロファイルが追加され、Agentの権限がコピーされました。
さいごに
AWS SDK for Python (Boto3) を使ったセキュリティプロファイルのコピーをやってみました。
コンソールを確認しながら実施するよりも簡単に同様のセキュリティプロファイルの作成が実施できると思います。
コピー元とコピー先の指定を間違えないように気を付けてください。
次回はユーザーのコピーについて、認証方式がIDパスワード方式のインスタンスに作成されたユーザーから、SAML方式のインスタンスに作成されたユーザーへのコピーのブログを書きます。